/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Persistencia.DAOS;

import Controladores.CtrlAgregarEntradaMuro;
import Controladores.CtrlUsuarios;
import DataTypes.DataContenido;
import DataTypes.DataGrupo;
import DataTypes.DataUsuario;
import Hndlr.HndlrGrupo;
import Hndlr.HndlrUsuario;
import Interfaces.Factory;
import Interfaces.ICtrlAgregarEntradaMuro;
import Interfaces.ICtrlUsuarios;
import com.csvreader.CsvReader;
import com.csvreader.CsvWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Iterator;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.Date;

/**
 *
 * @author Usuario
 */
public class DAOMuros {
    
    ICtrlUsuarios usu = new CtrlUsuarios();
    
    
    public void guardarEntradasMuroUsuarios(String path){
           String ruta = (path+"\\entradaMuro.csv");
        try {
            CsvWriter writer = new CsvWriter(ruta);
                writer.write("Muro");
                writer.write("Contenido");
                writer.write("Fecha");
                writer.write("Autor");
                HndlrUsuario hu = HndlrUsuario.getInstance();
                ArrayList<DataGrupo> listG = HndlrGrupo.getInstance().listarGrupos();
                Iterator<DataGrupo> itListG = listG.iterator();
                ArrayList<DataUsuario> listU = hu.listarDUsuarios();
                Iterator<DataUsuario> itListU = listU.iterator();
                ArrayList<DataContenido> contenidos;
                Iterator<DataContenido> itCont;
                DataGrupo dg;
                DataUsuario du;
                DataContenido dt;
                while (itListU.hasNext()){
                    
                    du = itListU.next();
                    contenidos = du.getMuro().getContenidos();
                    itCont = contenidos.iterator();
                    
                    while(itCont.hasNext()){
                        
                        writer.endRecord();
                        dt = itCont.next();
                        writer.write(du.getCorreo());
                        writer.write(dt.getTitulo()+dt.getFechaPublicacion().getTime().toString());
                        int dia = dt.getFechaPublicacion().get(Calendar.DAY_OF_MONTH);
                        int mes = dt.getFechaPublicacion().get(Calendar.MONTH);
                        int anio = dt.getFechaPublicacion().get(Calendar.YEAR);
                        int hora = dt.getFechaPublicacion().get(Calendar.HOUR_OF_DAY);
                        int min = dt.getFechaPublicacion().get(Calendar.MINUTE);
                        writer.write(dia + "-" + mes + "-" + anio + "-" + hora + ":" + min);
                        writer.write(dt.getAutor().getCorreo());
                        
                        
                    }
                    
                }
                while (itListG.hasNext()){
                    
                    dg = itListG.next();
                    contenidos = dg.getMuro().getContenidos();
                    itCont = contenidos.iterator();
                    
                    while(itCont.hasNext()){
                        
                        writer.endRecord();
                        dt = itCont.next();
                        writer.write(dg.getNombre());
                        writer.write(dt.getTitulo()+dt.getFechaPublicacion().getTime().toString());
                        int dia = dt.getFechaPublicacion().get(Calendar.DAY_OF_MONTH);
                        int mes = dt.getFechaPublicacion().get(Calendar.MONTH);
                        int anio = dt.getFechaPublicacion().get(Calendar.YEAR);
                        int hora = dt.getFechaPublicacion().get(Calendar.HOUR_OF_DAY);
                        int min = dt.getFechaPublicacion().get(Calendar.MINUTE);
                        writer.write(dia + "-" + mes + "-" + anio + "-" + hora + ":" + min);
                        writer.write(dt.getAutor().getCorreo());
                        
                        
                    }
                    
                }
                
                
                
                writer.close();
                
        } catch (IOException ex) {
        }
        
    }
    
    
    
    public void CargarEntradasMuro(String path){
        
        String ruta = path+"\\entradaMuro.csv";
        ICtrlAgregarEntradaMuro entr = new CtrlAgregarEntradaMuro();
        
        try {
            CsvReader entradas = new CsvReader(new InputStreamReader(new FileInputStream(ruta), "UTF-8"));
            entradas.readHeaders();
            
            while (entradas.readRecord()) {
                
                String muro = entradas.get("Muro");
                String contenido = entradas.get("Contenido");
                String fecha = entradas.get("Fecha");
                String autor = entradas.get("Autor");
                DateFormat dateforma = new SimpleDateFormat("dd-MM-yyyy-HH:mm");
                Date date = dateforma.parse(fecha);
                Calendar cal = Calendar.getInstance();
                cal.setTime(date);
                
                DAOContenidos daoC = new DAOContenidos();
                DataContenido dCont = daoC.cargarContenidos(contenido,path);
                dCont.setAutor(Factory.getInstance().getUsuarios().getUsuario(autor));
                entr.agregarContenido(dCont,muro);
//                
//                if(dCont.getTipo().equals("Texto"))
//                entr.agregarContTexto(dCont.getTitulo(), dCont.getCuerpo(),muro,autor,dCont.getTipo());
//                if(dCont.getTipo().equals("Imagen"))
//                entr.agregarContImagen(dCont.getTitulo(), dCont.getUrl(),muro,autor,dCont.getTipo());
                
            }            
            
        } catch (ParseException ex) {
            Logger.getLogger(DAOMuros.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(DAOMuros.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
}
